package main

import (
	"fmt"
	"reflect"
)


func reflectSetValue2(x interface{}) {
	// *x = 200 类型是空接口类型 interface{}，不能直接修改值

	// // 类型断言
	// v, _ := x.(*int)
	// *v = 200  不能修改

	// 反射
	v := reflect.ValueOf(x).Elem() // 获取指针指向的值
	fmt.Printf("转换前v.Kind() = %v\n", reflect.ValueOf(x).Kind())
	fmt.Printf("转换后 v.Kind() = %v\n", v.Kind())
	if v.Kind() == reflect.Int64 {
			v.SetInt(200)
		} else if v.Kind() == reflect.String {
			v.SetString("hello world")
		} else {
			fmt.Println("类型不匹配")
		}
	fmt.Println(v.Interface())
}

func main() {
	var a int64 = 100

	reflectSetValue2(&a)
	fmt.Println(a)

	var b string = "hello"
	reflectSetValue2(&b)
	fmt.Println(b)
}